package bit_operation;

/**
 * @Description 剑指 Offer II 002. 二进制加法
 * @Author Firenut
 * @Date 2023-04-15 14:45
 */
public class II002_addBinary {
    /**
     * 思路: 依次遍历字符串,逐位进行求和 (因为两个字符串的长度不一定相同,所以相加的时候要考虑下标是否>=0)
     *  %2 可得当前位的值
     *  /2 可计算进位值
     */
    public String addBinary(String a, String b) {
        // % 2 可得当前位的值
        // /2 可得进位值
        StringBuilder ans = new StringBuilder();
        int temp = 0;
        // 注意条件:  i >= 0 || j >= 0
        for (int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--, j--) {
            if (i >= 0) {
                // 越界判断
                temp += a.charAt(i) - '0';
            }
            if (j >= 0) {
                // 越界判断
                temp += b.charAt(j) - '0';
            }
            ans.append(temp % 2);
            temp /= 2;
        }
//        temp == 1 ? ans.append(1) : ans.append("");
        // 判断是否需要补位
        ans.append(temp == 1 ? temp : "");
        // 反转即为所求
        return ans.reverse().toString();
    }
}
